Micron Document
██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝


🬧 The NomadNet Encyclopedia | Archives | Info
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b

🔍 Search

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Apache Groovy
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
mwbqApache Groovy, fino al 2015 solo mwbgGroovy, è un mwbwlinguaggio di programmazione mwcaa oggetti per la mwcqPiattaforma Java alternativo al mwcglinguaggio Java. È un linguaggio sia statico che dinamico, può quindi essere utilizzato sia come linguaggio di programmazione che come mwcwlinguaggio di scripting. Presenta caratteristiche simili a quelle di mwdaPython, mwdqRuby e mwdgSmalltalk. A volte ci si riferisce a Groovy con il nome alternativo di mwdwJSR 241.

Contents

Traits
Storia
Note

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Caratteristiche

Groovy usa una mwewsintassi simile a quella di Java, basata su mwfaparentesi graffe, viene compilato in mwfqbytecode per la mwfgJava Virtual Machine, ed interagisce in modo trasparente con altro codice Java e con le librerie esistenti. Il mwfwcompilatore di Groovy può essere usato per generare bytecode Java standard che può quindi essere usato da qualsiasi progetto Java. Groovy può anche venire usato come linguaggio di scripting dinamico.

Altre caratteristiche:

• Sintassi nativa per liste, mappe ed mwhgespressioni regolari
• Chiusure
• mwigOverloading degli operatori

Confronto della sintassi

Standard Java (Java 5+)

for (String item : new String [] {"Rod", "Carlos", "Chris"}) {
if (item.length() <= 4) System.out.println(item);
}

Groovy

["Rod", "Carlos", "Chris"].findAll { it.size() <= 4 }.each { println it }

Getter, setter e visibilità

Rispetto a Java, Groovy consente di ridurre la dimensione del codice scritto generando automaticamente i metodi getter e setter per ogni classe e impostando la visibilità "public" di default, senza richiedere che venga specificata ogni volta.

Per creare una proprietà in sola lettura sarà sufficiente implementare il metodo getter omettendo il setter.

Un altro vantaggio è l'assenza del punto e virgola (;) come terminatore di linea.

Standard Java (Java 5+)

public class Libro {
private String titolo;
private String autore;
public void setTitolo(String valore) {
this.titolo = valore;
}
public String getTitolo() {
return this.titolo;
}
// La proprietà 'author' non ha un metodo setter
// ed è quindi in sola lettura
public String getAutore() {
return this.autore;
}
}

Groovy

class Libro {
String titolo
String autore
// La proprietà 'autore' definisce un metodo getter esplicito
// che la rende in sola lettura
String getAutore() {
return autore
}
}

Null Safe

Groovy definise degli operatori di confronto che riescono a gestire valori Null senza generare una eccezionecite-ref-1[1]. Ad esempio:

if (100 > null) {
// Ritorna 'true' ed eseguirà il codice nel blocco
}
if (null > 100) {
// Ritorna 'false' e NON eseguirà il codice nel blocco
}

Inoltre con la "Groovy Truth"cite-ref-2[2] è possibile semplificare le espressioni che ritornano un valore booleano. Ad esempio le seguenti espressioni daranno come risultato sempre 'false':

if (null) { ... // null -> false
if (0) { ... // 0 -> false
if ('') { ... // Blank String -> false
if ([]) { ... // Empty List -> false
if ([:]) { ... // Empty Map -> false

Traits

Groovy rende possibile l'ereditarietà multipla attraverso i 'traits'cite-ref-3[3]

trait Volatile {
void vola() {
println 'Sto volando!'
}
}
trait Quadrupede {
void trotta() {
println 'Sto trottando!'
}
}
class AnimaleFantastico implements Quadrupede, Volatile {
void parla() {
println 'Sto parlando :)'
}
}
def miniPony = new AnimaleFantastico()
miniPony.trotta()
miniPony.vola()
miniPony.parla()
Esecuzione:
Sto volando!
Sto trottando!
Sto parlando :)

Supporto per linguaggi markup

Una caratteristica di Groovy che vale la pena sottolineare è il suo supporto nativo per vari mwadalinguaggi di markup come mwadeXML ed mwadiHTML. Questa caratteristica permette di definire e manipolare molti tipi di dati eterogenei con una sintassi ed una metodologia di programmazione uniformi.

Per esempio il seguente codice Groovy:

import groovy.xml.MarkupBuilder
def myXMLDoc = new MarkupBuilder()
myXMLDoc.workbook {
worksheet(caption:"Employees") {
row(fname:"John", lname:"McDoe")
row(fname:"Nancy", lname:"Davolio")
}
worksheet(caption:"Products") {
row(name:"Veeblefeetzer", id:"sku34510")
row(name:"Prune Unit Zappa", id:"sku3a550")
}
}
println myXMLDoc

Produce questo XML:

<workbook>
<worksheet caption='Employees'>
<row fname="John" lname="McDoe" />
<row fname="Nancy" lname="Davolio" />
</worksheet>
<worksheet caption='Products'>
<row name="Veeblefeetzer" id="sku34510" />
<row name="Prune Unit Zappa" id="sku3a550" />
</worksheet>
</workbook>

Storia

James Strachan parlò per la prima volta dello sviluppo di Groovy sul suo blog nell'agosto mwana2003cite-ref-4[4]. Diverse versioni furono pubblicate tra il mwanu2004 ed il mwany2006. Dopo l'inizio del processo di standardizzazione mwancJCP, la numerazione delle versioni fu cambiata e la versione chiamata "1.0" fu pubblicata martedì 2 gennaio mwang2007.

Dopo varie mwanoversioni beta e mwansrelease candidate numerate come 1.1, il 7 dicembre mwanw2007 mwan0Groovy 1.1 Final è stato pubblicato e rinumerato come Groovy 1.5, per evidenziare i grandi miglioramenti fatti rispetto alla precedente versione.

Versioni

Di seguito la lista delle versioni:cite-ref-5[5]cite-ref-6[6]

• 1.0 uscita a gennaio 2007, richiede JDK 1.4
• 2.0 uscita a giugno 2012, richiede almeno JDK 1.5 e introduce la compilazione statica e il type checking statico.
• 2.4 uscita a gennaio 2015, richiede almeno JDK 1.6, dalla versione 2.4.4 il linguaggio Groovy viene pubblicato dalla mwaowApache Software Foundation e diventa Apache Groovycite-ref-7[7]
• Groovy 2.5 è uscito a maggio 2018, richiede almeno JDK 1.7
• Groovy 3.0 è uscito a febbraio 2020, richiede almeno JDK 1.8 e introduce un nuovo parser più flessibile (chiamato "Parrot")cite-ref-8[8]
• Groovy 4.0 è uscito a gennaio 2022, richiede almeno JDK 1.8, implementa un supporto migliorato per JPMS ed è la prima versione a utilizzare "org.apache.groovy" come coordinata Mavencite-ref-9[9]
• Dalla versione 5.0 il requisito minimo è JDK 11 cite-ref-10[10]

Note

cite-note-11. mwaqcmwaqgmwaqkOperatori di confronto Null-Safe, su mwaqodocs.oracle.com.
cite-note-22. mwaq4mwaq8mwaraGroovy Truth, su mwaregroovy-lang.org.
cite-note-33. mwarumwarymwarcGroovy Traits, su mwarggroovy-lang.org.
cite-note-44. mwarw(mwar0mwar4EN) mwar8mwasaJames Strachan's Weblog, su mwaseradio.weblogs.com mwasi(archiviato dall'mwasmurl originale il 5 aprile 2007).
cite-note-55. mwascmwasgmwaskChangelog delle versioni di Apache Groovy, su mwasogroovy-lang.org.
cite-note-66. mwas4mwas8mwataVersioni JDK richieste in base alla versione di Groovy, su mwategroovy.apache.org.
cite-note-77. mwatumwatymwatcComunicazione ufficiale nella mailing list di sviluppo, su mwatglists.apache.org.
cite-note-88. mwatwmwat0mwat43.0 Release Notes, su mwat8groovy-lang.org.
cite-note-99. mwaummwauqmwauu4.0 Release Notes, su mwauygroovy-lang.org.
cite-note-1010. mwauomwausmwauw5.0 Release Notes, su mwau0groovy-lang.org.

Voci correlate

• mwaveGrails, framework web basato su Groovy
• mwavmManyDesigns Portofino, web framework basato su Groovy
• mwavuGradle, sistema di build automation basato su Groovy

Altri progetti

Altri progetti

• Wikimedia Commons

• Wikimedia Commons contiene immagini o altri file su Apache Groovy

Collegamenti esterni

• (EN) Sito ufficiale, su groovy-lang.org.
• Sito ufficiale, su groovy.apache.org.
• Apache Groovy, su packages.debian.org.
• Repository sorgenti di Apache Groovy, su github.com.
• Repository sorgenti di Apache Groovy, su gitbox.apache.org.
• Sito di segnalazione bug, su issues.apache.org.
• mwavw(EN) Sito ufficiale, su groovy.codehaus.org. URL consultato il 17 dicembre 2007 (archiviato dall'url originale il 2 marzo 2014).
• mwav4(EN) JSR 241, su jcp.org.
• mwawa(EN) An introduction to Groovy, su ibm.com.